﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Onshi.POS.Comun.Vistas;
using Onshi.POS.Repositorios;
using Onshi.POS.Modelo.Entidades;
using Onshi.POS.Modelo.Enumeradores;
using Onshi.POS.Modelo.Seguridad;

namespace Onshi.POS.Comun
{
    public class PromocionAbmPresentador
    {
        #region Constructor
        public PromocionAbmPresentador(IPromocionAbm vista)
        {
            this.vista = vista;
        }
        #endregion

        #region Atributos
        private IPromocionAbm vista = null;
        private List<Promocion> lista;
        #endregion

        #region Propiedades
        private RepositorioPromocion RepositorioPromocion
        {
            get { return new RepositorioPromocion(); }
        }
        #endregion

        #region Metodos

        private void ActualizarLista()
        {
            lista = RepositorioPromocion.DevolverTodos();
            vista.Lista = lista;
        }

        private void Guardar()
        {
            var Promocion = new Promocion();
            Promocion.Id = vista.IdPromocion;
            Promocion.Nombre = vista.Nombre;

            #region Encripto
            Crypto crypto = new Crypto(Crypto.CryptoProvider.DES);
            crypto.IV = "clave";
            crypto.Key = "clave";
            Promocion.Clave = crypto.CifrarCadena(vista.Clave);
            #endregion

            Promocion.Perfil = new Perfil();
            Promocion.Perfil.Id = vista.IdPerfil;
            Promocion.EstaBorrado = vista.EstaBorrado;
            Promocion.Observacion = vista.Observacion;
            switch (vista.EstadoAbm)
            {
                case EnumEstadoAltaBajaModificacion.ALTA:
                    RepositorioPromocion.Insertar(Promocion);
                    break;
                case EnumEstadoAltaBajaModificacion.MODIFICACION:
                    RepositorioPromocion.Modificar(Promocion);
                    break;
                case EnumEstadoAltaBajaModificacion.BAJA:
                    RepositorioPromocion.Eliminar(Promocion);
                    break;
            }
            ActualizarGrilla();
        }

        public void Aceptar()
        {
            Guardar();
        }

        public void Eliminar()
        {
            Guardar();
        }

        public void ActualizarGrilla()
        {
            ActualizarLista();
            Filtrar();
        }

        public void Filtrar()
        {
            if (lista != null && vista.NombreBusqueda != String.Empty)
            {
                var consulta = from Promocion item in lista
                               where item.Nombre.ToLower().Contains(vista.NombreBusqueda)
                               select item;
                vista.Lista = consulta.ToList();
            }
            else
            {
                vista.Lista = lista;
            }
        }

        #endregion

    }
}
